package org.batatasframework.common;

import java.util.List;

import org.batatasframework.values.ValueGetter;
import org.batatasframework.values.ValueReader;
import org.batatasframework.web.MultipartFileReader;

/**
 * 通用的参数读取接口
 * @author jackson
 *
 */
public interface ParameterReader extends ValueReader, MultipartFileReader{
	
	/** 子参数，逻辑上的子参数；如：以"某个符号+编号"进行传输的数据 */
	Iterable<SubparameterReader> parameters(String name);
	
	String[] arrayString(String name);
	List<String> listString(String name);
	
	List<Long> listLong(String name);
	
	/**<pre>
	 * 某一个参数的子参数，如：
	 * arrays = a,b,c
	 * a_0 = 100
	 * a_name = china
	 * a_type = cat
	 * b_0 = 200
	 * b_name = usa
	 * c_0 = 300
	 * c_name = ja
	 * 
	 * for(SubparameterReader sr : {@link #parameters(String) parameters("arrays")}){
	 * 	{@link ValueReader#getString(String) getString("name")}//[china, usa, ja]
	 * }
	 * 
	 * </pre>
	 * 
	 * @author jackson
	 *
	 */
	public interface SubparameterReader extends ParameterReader, MultipartFileReader {
		
		/** 原来的参数，子参数的参数名是原参数为前缀或后缀进行组合 */
		ValueGetter sourceValue();
	}
}
